package org.liuwei.concurent04.CurrentLimit03;

import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.RateLimiter;

//平滑限流某个接口的请求数
//之前的限流方式都不能很好地应对突发请求，即瞬间请求可能都被允许从而导致一些问题；因此在一些场景中需要对突发请求进行整形，
//整形为平均速率请求处理（比如5r/s，则每隔200毫秒处理一个请求，平滑了速率）。这个时候有两种算法满足我们的场景：令牌桶和漏桶算法。
//Guava框架提供了令牌桶算法实现，可直接拿来使用。
//Guava RateLimiter提供了令牌桶算法实现：平滑突发限流(SmoothBursty)和平滑预热限流(SmoothWarmingUp)实现。
public class CurrentLimit3 {

	public static void main(String[] args) throws InterruptedException {
		RateLimiter limiter = RateLimiter.create(5);
//		TimeUnit.SECONDS.sleep(5);
		System.out.println(limiter.acquire());
		System.out.println(limiter.acquire());
		System.out.println(limiter.acquire());
		System.out.println(limiter.acquire());
		System.out.println(limiter.acquire());
		System.out.println(limiter.acquire());

	}

}